home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 79 / maccd 79.iso / multimedial / GL Tron / Source / gltron / network.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-13  |  1.8 KB  |  80 lines  |  [TEXT/CWIE]

  1. #include "gltron.h"
  2.  
  3. #define HEADER_SIZE 6
  4.  
  5. void clientConnectToServer() {
  6.   
  7. }
  8.  
  9. void sendNetEvent(GameEvent *e) {
  10.   unsigned char buf[HEADER_SIZE];
  11.   buf[0] = NET_EVENT;
  12.   buf[1] = '\0';
  13.   SystemNet_Write32(sizeof(GameEvent), buf + 2);
  14.   /* TODO: decide if to send to server or multiple clients */
  15.   SystemTCPsend(buf, sizeof(buf));
  16.   SystemTCPsend((char*) e, sizeof(GameEvent));
  17. }
  18.  
  19. void updateNet() {
  20.   unsigned char buf[HEADER_SIZE];
  21.   NetData *data;
  22.   list *p;
  23.   list *l;
  24.  
  25.   while(SystemCheckSockets()) {
  26.     data = (NetData*) malloc(sizeof(NetData));
  27.     for(p = game2->network->data; p->next != NULL; p = p->next);
  28.     l = (list*) malloc(sizeof(list));
  29.     p->next = l;
  30.     l->next = NULL;
  31.     l->data = data;
  32.  
  33.     SystemTCPrecv(buf, sizeof(buf));
  34.     data->type[0] = buf[0];
  35.     data->type[1] = buf[1];
  36.     data->length = SystemNet_Read32(buf + 2);
  37.     if(data->length != 0) {
  38.       data->data = (char*) malloc(data->length);
  39.       SystemTCPrecv(data->data, data->length);
  40.     }
  41.   }
  42.   return;
  43. }
  44.  
  45. GameEvent* getNetEvent() {
  46.   static GameEvent *current = NULL;
  47.   GameEvent *result;
  48.   list *p;
  49.   list *l;
  50.   NetData *data;
  51.  
  52.   if(game2->network == NULL) {
  53.     fprintf(stderr, "networking not even initialized\n");
  54.     return NULL;
  55.   }
  56.  
  57.   if(current == NULL) {
  58.     for(p = game2->network->data; p->next != NULL; p  = p->next) {
  59.       data = (NetData*) p->data;
  60.       if(data->type[0] == NET_EVENT) {
  61.     current = (GameEvent*) data->data;
  62.     /* remove event from list now */
  63.     p->data = p->next->data;
  64.     l = p->next;
  65.     p->next = p->next->next;
  66.     free(l);
  67.       }
  68.     }
  69.   }
  70.  
  71.   if(current != NULL) { /* werde wohl kaum events aus der Zukunft bekommen */
  72.     if(current->timestamp < game2->time.current) {
  73.       result = current;
  74.       current = NULL;
  75.       return result;
  76.     }      
  77.   }
  78.   return NULL;
  79. }
  80.